package com.loong.nnm.services;

import com.loong.nnm.entity.netconf.NetconfBuilderParameters;
import net.juniper.netconf.XML;

/**
 * netconf协议连接配置
 *
 * @author wcloong
 * @time 2022/9/13
 */
public interface NetconfToolServices {

    /**
     * 创建连接
     *
     * @param parameters 连接产生 ip、端口、用户名、密码
     * @return 连接状态：1成功、0失败
     */
    int createConnection(NetconfBuilderParameters parameters);

    /**
     * 获取该网元的连接状态
     *
     * @param node 网元名称
     * @return true/false
     */
    boolean getConnectionStatus(String node);

    /**
     * 关闭连接
     *
     * @param node 网元名称
     */
    void close(String node);

    /**
     * 重启
     *
     * @param node 网元名称
     */
    void reboot(String node);

    /**
     * 保持连接
     *
     * @param node 网元名称
     * @return
     */
    String keepalive(String node);

    /**
     * netconf发送请求
     *
     * @param node    网元名称
     * @param content 操作的库、操作方法、请求子树结构
     * @return 请求子树所包含的内容
     */
    String send(String node, String content);

    /**
     * netconf获取操作请求
     *
     * @param node    网元名称
     * @param content 请求子树结构
     * @return 请求子树所包含的内容
     */
    String get(String node, String content);

    /**
     * netconf获取操作请求
     *
     * @param node       网元名称
     * @param xmlContent 请求子树结构
     * @return 请求子树所包含的内容
     */
    String get(String node, XML xmlContent);

    /**
     * netconf中edit-config操作请求
     *
     * @param node    网元名称
     * @param content 修改子树的内容
     * @return 操作标志
     */
    String put(String node, String content);

    /**
     * netconf中edit-config操作请求
     *
     * @param node    网元名称
     * @param content 修改子树的内容
     * @return 操作标志
     */
    String put(String node, XML content);

    /**
     * netconf中rpc操作请求
     *
     * @param node    网元名称
     * @param content 修改子树的内容
     * @return 操作标志
     */
    String post(String node, String content);

    /**
     * netconf中rpc操作请求
     *
     * @param node    网元名称
     * @param content 修改子树的内容
     * @return 操作标志
     */
    String post(String node, XML content);

    /**
     * netconf中delete-config操作请求
     *
     * @param node    网元名称
     * @param content 所删除子树的名称内容
     * @return 操作标志
     */
    String delete(String node, XML content);

    /**
     * netconf中notification订阅操作请求
     *
     * @param node 网元名称
     * @return 操作标志
     */
    String createSubscription(String node);

}
